/**
 * @author Vitor Franco do Carmo (vitor.carmo@capgemini.com)
 * @since 15/08/2013
 *
 */
package br.com.vfcfw.controller.model;

import java.util.Date;

import org.primefaces.model.DefaultScheduleEvent;
import org.primefaces.model.LazyScheduleModel;

import br.com.vfcfw.commons.util.ValidacaoUtil;

/**
 * Abstração com a implementação padrão do LazyScheduleModel usado no componente Schedule.
 * 
 * @author Vitor Franco do Carmo (vitor.carmo@capgemini.com)
 * @since 15/08/2013
 * 
 */
public class BasePrimefacesScheduleModel extends LazyScheduleModel {

    /** */
    private static final long serialVersionUID = -4287964669281741819L;

    /**
     * Construtor da classe.
     */
    public BasePrimefacesScheduleModel() {

        super();
    }

    /**
     * {@inheritDoc}
     * 
     * @see org.primefaces.model.LazyScheduleModel#loadEvents(java.util.Date, java.util.Date)
     */
    @Override
    public void loadEvents(Date dataInicial, Date dataFinal) {

        carregarEventos(dataInicial, dataFinal);
    }

    /**
     * Carrega os eventos no Schedule dentro do período informado. <p><tt></tt></p>
     * 
     * @param dataInicial Data inicial dos eventos.
     * @param dataFinal Data final dos eventos.
     */
    protected void carregarEventos(Date dataInicial, Date dataFinal) {

    }

    /**
     * Adiciona um evento ao Schedule.
     * 
     * @param titulo Título do evento.
     * @param dataInicio Data de início do evento.
     * @param dataFim Data de término do evento.
     */
    public void adicionarEvento(String titulo, Date dataInicio, Date dataFim) {

        addEvent(new DefaultScheduleEvent(titulo, dataInicio, dataFim));
    }

    /**
     * Adiciona um evento ao Schedule.
     * 
     * @param titulo Título do evento.
     * @param dataInicio Data de início do evento.
     * @param dataFim Data de término do evento.
     * @param classeCSS Classe CSS para customizar a exibição do evento no Schedule.
     */
    public void adicionarEvento(String titulo, Date dataInicio, Date dataFim, String classeCSS) {

        addEvent(new DefaultScheduleEvent(titulo, dataInicio, dataFim, classeCSS));
    }

    /**
     * Adiciona um evento ao Schedule.
     * 
     * @param titulo Título do evento.
     * @param dataInicio Data de início do evento.
     * @param dataFim Data de término do evento.
     * @param diaTodo <tt>TRUE</tt> Quando o evento durar o dia todo, <tt>FALSE</tt> caso contrário.
     */
    public void adicionarEvento(String titulo, Date dataInicio, Date dataFim, boolean diaTodo) {

        addEvent(new DefaultScheduleEvent(titulo, dataInicio, dataFim, diaTodo));
    }

    /**
     * Adiciona um evento ao Schedule.
     * 
     * @param titulo Título do evento.
     * @param dataInicio Data de início do evento.
     * @param dataFim Data de término do evento.
     * @param dado Dado.
     */
    public void adicionarEvento(String titulo, Date dataInicio, Date dataFim, Object dado) {

        addEvent(new DefaultScheduleEvent(titulo, dataInicio, dataFim, dado));
    }

    /**
     * Verifica se o valor é nulo ou vazio.
     * 
     * @param valor Valor.
     * @return <tt>TRUE</tt> se não for <b>nulo</b> ou <b>vazio</b>, <tt>FALSE</tt> caso contrário.
     */
    protected static boolean possuiValor(final Object valor) {

        return ValidacaoUtil.possuiValor(valor);
    }

}
